package com.color.admin.system.repository;


import com.color.admin.system.entity.SysDept;
import com.color.admin.system.entity.SysPost;
import com.color.admin.system.entity.SysRole;
import com.color.admin.system.entity.SysUser;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author HaiQiu
 * @date 2021/12/6
 */
@Repository
public interface UserRepository extends JpaRepository<SysUser,String>, JpaSpecificationExecutor<SysUser> {

    /**
     * 根据用户名查询用户
     * @param username 用户名
     * @return 用户
     */
    SysUser findByUsername(String username);

    /**
     * 删除用户
     * @param ids 用户ID数组
     * @return 成功条数
     */
    int deleteAllByIdIn(Set<String> ids);

    /**
     * 根据角色ID查询关联的用户列表
     * @param roleIds 角色ID集合
     * @return 用户列表
     */
    List<SysUser> findAllByRolesIn(List<SysRole> roleIds);

    /**
     * 根据岗位ID查询关联的用户列表
     * @param postIds 岗位ID集合
     * @return 用户列表
     */
    List<SysUser> findAllByPostsIn(List<SysPost> postIds);

    /**
     * 根据部门ID查询关联的用户列表
     * @param deptIds 部门ID集合
     * @return 用户列表
     */
    @Query(value = "select * from sys_user where 1=1 and id in (" +
            "select user_id from sys_users_depts sud where sud.dept_id in (?1))",nativeQuery = true)
    List<Map<String,Object>> findAllByDeptIds(Set<String> deptIds);

    /**
     * 根据用户ID集合批量查询用户
     * @param userIds 用户ID集合
     * @return 用户集合
     */
    List<SysUser> findAllByIdIn(Set<String> userIds);

    /**
     * 根据部门ID查询数据
     * @param sysDept 部门数据
     * @return 用户列表
     */
    List<SysUser> findAllByDept(SysDept sysDept);
}
